package org.hxyjs.service.impl;


import org.hxyjs.dao.OrderRecordsDao;
import org.hxyjs.dto.DTO;
import org.hxyjs.dto.MessageEnum;
import org.hxyjs.entity.OrderRecords;
import org.hxyjs.page.PageInfo;
import org.hxyjs.service.OrderRecordsService;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;

@Service("OrderRecordsService")
public class OrderRecordsServiceImpl implements OrderRecordsService {
    @Resource
    OrderRecordsDao orderRecordsDao;
//    @Resource
//    RedisDao redisDao;
    @Override
    public DTO<OrderRecords> getAllOrderRecordss()  throws Exception{
        List<OrderRecords> orderRecordss = orderRecordsDao.getAllOrderRecordss();
        MessageEnum messageEnum  = Optional.ofNullable(orderRecordss).isPresent()?MessageEnum.GETBOOKSSUCCESS: MessageEnum.GETBOOKSFAIL;
        return new DTO<OrderRecords>(messageEnum.getCode(),messageEnum.getMessage(),orderRecordss);
    }

    @Override
    public DTO<OrderRecords> deleteOrderRecordsByUshOrno(String oshOrno)  throws Exception{
        Integer result = orderRecordsDao.deleteOrderRecordsByUshOrno(oshOrno);
        MessageEnum messageEnum  =result> 0?MessageEnum.DELETEBOOKSSUCCESS:MessageEnum.DELETEBOOKSFAIL;
        return new DTO<OrderRecords>(messageEnum.getCode(),messageEnum.getMessage());
    }

    @Override
    public DTO<OrderRecords> updateOrderRecordsByUshOrno(OrderRecords orderRecords)  throws Exception{
//        Integer result = orderRecordsDao.updateOrderRecordsByUshOrno(orderRecords);
//        DTO<OrderRecords> dto = result > 0 ? new DTO(MessageEnum.ADDBOOKSSUCCESS.getCode(), MessageEnum.ADDBOOKSFAIL.getMessage()) :
//                new DTO(MessageEnum.ADDBOOKSFAIL.getCode(), MessageEnum.ADDBOOKSFAIL.getMessage());
//        ObjectMapper mapper = new ObjectMapper();
//        boolean inRedisFlag = false;//默认不在redis的某一页缓存中
//        for(int i=0;i<2;i++) {
//            //redisDao会从redis中取出TeacherBYPage1对应的json字符串，利用自己写的JacksonUtils工具deserializeDTO反序列化出dto对象
//            String jsonStr = redisDao.get("OrderRecordsByPage"+(i+1));
//            System.out.println("----------------------");
//            System.out.println(jsonStr);
//            DTO<OrderRecords> redisBackDTO = JacksonUtils.deserializeDTO(jsonStr, DTO.class, OrderRecords.class);
//            if(redisBackDTO.getCode() == 200) {//因为反序列化保存的dto对象的值一定是200，能够找到缓存状态吗就是200 而没有找到缓存的状态吗409
//                for (OrderRecords orderRecordsTemp : redisBackDTO.gettList()) {
//                    if (orderRecords.getUshOrno().equals(orderRecordsTemp.getUshOrno())) {//如果判断成立 则本次修改的数据在缓存中需要删除原来的缓存让下一次查询自动更新
//                        redisDao.delete("OrderRecordsByPage" + (i + 1));
//                        inRedisFlag = true;
//                        break;
//                    }
//                }
//                if (inRedisFlag) {
//                    break;
//                }
//            }
//        }
//        return dto;
        Integer result = orderRecordsDao.updateOrderRecordsByUshOrno(orderRecords);
        MessageEnum messageEnum  =result> 0?MessageEnum.UPDATEPARENTSSUCCESS:MessageEnum.UPDATEPARENTSFAIL;
        return new DTO<OrderRecords>(messageEnum.getCode(),messageEnum.getMessage());
    }

    @Override
    public DTO<OrderRecords> addOrderRecords(OrderRecords orderRecords) throws Exception {
//        orderRecords.setUshOrno(GenNumTools.initId("v",5,orderRecordsDao.getMaxUshOrno()));
//        Integer result = orderRecordsDao.addOrderRecords(orderRecords);
//        DTO<OrderRecords> dto = result > 0 ? new DTO(MessageEnum.ADDBOOKSSUCCESS.getCode(),MessageEnum.ADDBOOKSSUCCESS.getMessage()):
//                new DTO(MessageEnum.ADDBOOKSFAIL.getCode(),MessageEnum.ADDBOOKSFAIL.getMessage());
//        return dto;
        Integer result = orderRecordsDao.addOrderRecords(orderRecords);
        MessageEnum messageEnum  = result> 0?MessageEnum.ADDBOOKSSUCCESS:MessageEnum.ADDBOOKSFAIL;
        return new DTO<OrderRecords>(messageEnum.getCode(),messageEnum.getMessage(),orderRecords);
    }

    @Override
    public DTO<OrderRecords> getOrderRecordsByPage(PageInfo pageInfo ) throws Exception {
        List<OrderRecords> orderRecordss = orderRecordsDao.getOrderRecordsByPage(pageInfo);
        MessageEnum messageEnum  = Optional.ofNullable(orderRecordss).isPresent()?MessageEnum.GETBOOKSSUCCESS: MessageEnum.GETBOOKSFAIL;
        DTO<OrderRecords> dto = new DTO(messageEnum.getCode(),messageEnum.getMessage(),orderRecordss,pageInfo);
        return dto;
    }

    @Cacheable(value = "myCache",key = "#cacheId")
    @Override
    public DTO<OrderRecords> getOrderRecordsByPage(PageInfo pageInfo, String cacheId) throws Exception {
        List<OrderRecords> orderRecordss = orderRecordsDao.getOrderRecordsByPage(pageInfo);
        MessageEnum messageEnum = orderRecordss.size() > 0?MessageEnum.ADDBOOKSSUCCESS: MessageEnum.ADDBOOKSFAIL;
        DTO<OrderRecords> dto = new DTO(messageEnum.getCode(),messageEnum.getMessage(),orderRecordss,pageInfo);
        return dto;
    }
}
